Nonvolatile memory (for nonvolatile data) is available in many forms including NOR and NAND memory. With respect to NOR memory, all memory locations are guaranteed to be good, and in contrast, NAND memory is prone to have bad blocks. NAND memory, however, is less expensive than NOR memory, and as a consequence, techniques developed to handle the bad blocks that are inherent in NAND memory so that the less expensive NAND memory may be utilized.
It is known that NAND memory comes from suppliers with bad blocks, but a standard was established that a maximum of 2% of the blocks in the memory could be bad blocks. To handle the presence of these bad blocks, two methods arose to deal with the bad blocks: 1) the skip block method; and 2) the replace block method.
In the skip block method, when a bad block of memory (e.g., 128K bytes) is encountered, the bad block is skipped. And anytime data is being written to, or read from, memory, the memory is checked to make sure that the block is not bad before writing to, or reading from, the block of memory. When a bad block is encountered, the bad block is skipped, and the next block of data is accessed.
In the replace block method, space is reserved in the memory to accommodate data that would ordinarily be stored in the bad blocks, and typically a bad block management layer, which may be part of an abstraction of a low-level driver for the memory, checks the memory so that whenever a bad block is encountered, the bad block management layer remaps the data that is being stored to the portion of the memory that is reserved.
The skip block and replace block methods are used today in disparate devices, and operating systems (or other clients accessing the memory) are designed to access memory in a manner that is consistent with the way that data is stored in memory. In other words, software in devices is designed so that the content of memory is either organized according to the skip block or the replace block management approaches. So, software that is designed to directly access (e.g., via a low-level driver) memory using bad block management, without using a separate abstraction layer, can not be utilized in connection with file systems that operate according to the replace block management approach.
As a consequence, suppliers that want to partner with entities using a different bad block management approach are, at the very least, inconvenienced because they must either change the scheme utilized by their software to accommodate a third party's different bad block management approach, or find an alternative partner that operates in the same manner as their software. Accordingly, current bad block management schemes are not always able to interact will most certainly not be satisfactory in the future.